package demo;

import jdk.nashorn.internal.ir.CallNode;

import java.util.HashMap;

public class Test {
    public static void main(String[] args) {
        Worker worker = new Worker();
        worker.setAnInt(2);
        int age = worker.age;
        worker.print();
        Student a1 = new Student("a1");
        Student a2 = new Student("a1");
        Teacher b1 = new Teacher("a1");
        String s1 = new String("a1");
        String s2 = new String("a1");
        String s6 = new String("1");
        String s3 = "ccc";
        String s4 = "ccc";
        String s5 = "a1";
        int i1 = 1;
        int i2 = 1;
        System.out.println(s1.equals(s2));//true
        System.out.println(s2.equals(s1));//true；对称性
        System.out.println(s1.equals(null));//false；任何不是null的x，x.equals(null)一定返回false
        System.out.println(s1.equals("a1"));//true;因为s1是String类型的有自己的equals方法，先判断地址是否一样，不一一样再看参数是否为String，是的话比较的就是内容是否一样
        System.out.println(a1.equals("a1"));//false;因为a1是Student类型的使用Object类的equals方法，比较的是地址
        System.out.println(a1.equals(a2));//false;因为a1是Student类型的使用Object类的equals方法，比较的是地址，这里new了两个对象，显然地址不一样。
        System.out.println(a1.equals(b1));//false；因为a1是Student类型的使用Object类的equals方法，比较的是地址，这里new了两个对象，显然地址不一样。
        System.out.println(a2.equals(b1));//false;因为a2是Student类型的使用Object类的equals方法，比较的是地址，这里new了两个对象，显然地址不一样。
        System.out.println(s1.equals(a1));//false；因为s1是String类型的使用Object类的equals方法，首先判断a1是否是s1同一个对象，不是的话判断这个参数a1是否为String类型的，如果不是那么返回false，如果是，那么就比较他们之间的内容是否一样
        System.out.println(s1.equals(s1));//ture；因为s1是String类型的使用Object类的equals方法，首先判断s1是否是s1同一个对象；这里是同一个对象，所以返回true；
        System.out.println(s1.equals(b1));//false；因为s1是String类型的使用Object类的equals方法，首先判断b1是否是s1同一个对象；这里不是同一个对象，继续判断参数是否为String类型，这里不是，所以返回false
        System.out.println(s1.equals(s2));//true；因为s1是String类型的使用Object类的equals方法，首先判断s2是否是s1同一个对象；这里不是同一个对象，继续判断参数是否为String类型，这里是String类型，继续判断内容是否一样，内容一样所以是true；
        System.out.println(s1.equals(s5));//true；因为S1是String类型的使用Object类的equals方法，首先判断S5是否是跟s1为同一个对象，不是，继续判读参数是否为String类型，是，然后比较内容一样返回true。
        System.out.println(a1 == a1);//true;因为==比较的是地址，都是a1这个对象，只是值不同
        System.out.println(a1 == a2);//false；new两个对象，所以地址不同
        System.out.println(s1 == s2);//false；new两个对象，所以地址不同
        System.out.println(s3 == s4);//true;因为没有new对象，都是保存在字符串常量池中，所以地址都是一样的。
        System.out.println(i1 == i2);//true;因为是基本数据类型，保存在常量池中，所以地址都是一样的。

        HashMap

    }

}
